【深度学习-RNN系列】SRU

背景

RNN、LSTM、GRU都存在一个严重的问题,在 GPU 上实现时,效率不高,主要是由于前后两个时刻 t-1 和 t 的计算存在依赖性。

the sequential dependencies that are central to recurrent architectures limit parallelization potential

SRU

SRU(Simple Recurrent Unit)则提出更激进的架构,去掉了前后时刻计算的依赖。

  • input gate和forget gate的合并 (借鉴自GRU)
  • c和h的合并,(并未采用)

对比其他模型

在 GRU 中,大幅简化了 LSTM 结构

SRU进一步

实现细节(trick)

SRU实现:增加highway连接和变分dropout

首先,他们在循环层之间增加了highway连接,因为此前的研究已经证明,像highway连接这样的skip connections,在训练深度网络时非常有效;
其次,在将RNN正则化时,他们在标准的dropout外,增加了变分dropout,变分dropout在时间步长t与dropout使用相同的mask。

CUDA级的优化

源码

https://github.com/taolei87/sru/blob/master/sru/sru_functional.py#L128

好复杂,看着头疼

扩展阅读

  • Training RNNs as Fast as CNNs, pdf